/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * dlgConsultarRutaOptima.java
 *
 * Created on Oct 16, 2011, 10:23:35 PM
 */

package visual.Despacho;

import aentity.aePuntoUbicacion;
import alogic.alAlgMetaHeu;
import bentity.beAlmacen;
import bentity.beCoordenada;
import bentity.beEntrada;
import bentity.beOrdenDespacho;
import bentity.beUbicacion;
import bentity.beUsuario;
import blogic.blAlmacen;
import blogic.blHelper;
import blogic.blLog;
import blogic.blOrdenDespacho;
import blogic.blPallet;
import blogic.blRack;
import blogic.blUbicacion;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import visual.Almacenamiento.dlgAsociar;
import visual.Seguridad.visualHelper;

/**
 *
 * @author renzo
 */
public class dlgConsultarRutaOptima extends javax.swing.JDialog {
    private beOrdenDespacho ordenDespacho = null;
    private beUsuario usuario = null;
    private ArrayList<beUbicacion> ordenOptimoUbics = null;
    private ArrayList<aePuntoUbicacion> ptosRutaOptima = null;
    private int distancia1 = -1;
    private ArrayList<beUbicacion> ordenOptimoUbics1 = null;
    private ArrayList<aePuntoUbicacion> ptosRutaOptima1 = null;
    private int distancia2 = -1;
    private ArrayList<beUbicacion> ordenOptimoUbics2 = null;
    private ArrayList<aePuntoUbicacion> ptosRutaOptima2 = null;
    private ArrayList<beEntrada> entradas = null;
    beEntrada entrada = null;
    private boolean enProceso = true;
    /** Creates new form dlgConsultarRutaOptima */

    public dlgConsultarRutaOptima(pnfMantenimientoOrdenDespacho parent, boolean modal, beUsuario usuario) {
        super((java.awt.Frame)null, modal);
        initComponents();
        this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
        this.usuario = usuario;
        visualHelper.centrarDialogoEnPantalla(this);
        try{
            this.obtenerOrdenDespachoElegida(parent);

            ArrayList<beUbicacion> ubicaciones = (new blOrdenDespacho()).obtenerUbicacionesDisponibles(this.ordenDespacho.getPedidos());
            System.out.println("Culminó la obtención de ubicaciones.");
            if (ubicaciones != null){
                if (ubicaciones.size()!=0){
                    entradas = (new blAlmacen()).buscarObjsEntrada();
                    if (entradas.size() >= 2){
                        blHelper blh = new blHelper();
                        beAlmacen alm = blh.obtenerDatosAlmacen();
                        int numCol = blh.calcularNumeroColumnas(alm.getRacksXFila(), alm.getUbsxrack());
                        int numFil = blh.calcularNumeroFilas(alm.getFilas());
                        int posEntX = entradas.get(0).getPos_x();
                        int posEntY = entradas.get(0).getPos_y();

                        if ((posEntX == (numCol-1))&&(posEntY != (numFil-1)))
                            --posEntX;
                        if ((posEntX != (numCol-1))&&(posEntY == (numFil-1)))
                            --posEntY;
                        if ((posEntX == 0)&&(posEntY != 0))
                            ++posEntX;
                        if ((posEntX != 0)&&(posEntY == 0))
                            ++posEntY;

                        beUbicacion ent = new beUbicacion();
                        ent.setIdUbicacion(0);
                        beCoordenada c = new beCoordenada();
                        c.setxEnMapa(posEntX);
                        c.setyEnMapa(posEntY);
                        ent.setCoordenadas(c);
                        ubicaciones.add(0, ent);

                        alAlgMetaHeu algMeta1 = new alAlgMetaHeu();
                        algMeta1.CalcularRutaOptima(ubicaciones);
                        this.ordenOptimoUbics1 = algMeta1.getOrdenOptimoUbics();
                        this.ptosRutaOptima1 = algMeta1.getPuntosRutaOptima();
                        this.distancia1 = algMeta1.distanciaTotal;

                        posEntX = entradas.get(1).getPos_x();
                        posEntY = entradas.get(1).getPos_y();

                        if ((posEntX == numCol)&&(posEntY != numFil))
                            --posEntX;
                        if ((posEntX != numCol)&&(posEntY == numFil))
                            --posEntY;
                        if ((posEntX == 0)&&(posEntY != 0))
                            ++posEntX;
                        if ((posEntX != 0)&&(posEntY == 0))
                            ++posEntY;

                        beUbicacion ent2 = new beUbicacion();
                        ent2.setIdUbicacion(0);
                        beCoordenada c2 = new beCoordenada();
                        c2.setxEnMapa(posEntX);
                        c2.setyEnMapa(posEntY);
                        ent2.setCoordenadas(c2);
                        ubicaciones.remove(0);
                        ubicaciones.add(0, ent2);

                        alAlgMetaHeu algMeta2 = new alAlgMetaHeu();
                        algMeta2.CalcularRutaOptima(ubicaciones);
                        this.ordenOptimoUbics2 = algMeta2.getOrdenOptimoUbics();
                        this.ptosRutaOptima2 = algMeta2.getPuntosRutaOptima();
                        this.distancia2 = algMeta2.distanciaTotal;

                        if (algMeta2.distanciaTotal < algMeta1.distanciaTotal){
                            this.ordenOptimoUbics = this.ordenOptimoUbics2;
                            this.ptosRutaOptima = this.ptosRutaOptima2;
                            this.entrada = this.entradas.get(1);

                            this.lblProductosRecoger.setText("Orden de productos a recoger para la orden nro. "+this.ordenDespacho.getIdOrdenDespacho()+". Distancia total: "+distancia2+".");
                            this.lblEntrada.setText("Entrada: "+entradas.get(1).getRotulo());
                            this.cboOpciones.setSelectedIndex(1);
                        }
                        if (algMeta2.distanciaTotal >= algMeta1.distanciaTotal){
                            this.ordenOptimoUbics = this.ordenOptimoUbics1;
                            this.ptosRutaOptima = this.ptosRutaOptima1;
                            this.entrada = this.entradas.get(0);

                            this.lblProductosRecoger.setText("Orden de productos a recoger para la orden nro. "+this.ordenDespacho.getIdOrdenDespacho()+". Distancia total: "+distancia1+".");
                            this.lblEntrada.setText("Entrada: "+entradas.get(0).getRotulo());
                            this.cboOpciones.setSelectedIndex(0);
                        }
                        this.llenarTabla();
                    }
                    else{
                        this.btnGuardarRutaOptima.setEnabled(false);
                        this.btnImprimir.setEnabled(false);
                        this.btnVerMapa.setEnabled(false);
                        visualHelper.mostrarMensajeAdvertencia("No hay entradas suficientes en el almacén para obtener la ruta óptima.");
                    }
                }
                else{
                    this.btnGuardarRutaOptima.setEnabled(false);
                    this.btnImprimir.setEnabled(false);
                    this.btnVerMapa.setEnabled(false);
                    visualHelper.mostrarMensajeAdvertencia("No se encontraron pallets adecuados para la orden de despacho. Ingrese más pallets del producto solicitado.");
                }
            }
            else{
                this.btnGuardarRutaOptima.setEnabled(false);
                this.btnImprimir.setEnabled(false);
                this.btnVerMapa.setEnabled(false);
                visualHelper.mostrarMensajeAdvertencia("No se encontraron pallets adecuados para la orden de despacho. Ingrese más pallets del producto solicitado.");
            }
        }
        catch(Exception e){
            this.btnGuardarRutaOptima.setEnabled(false);
            this.btnImprimir.setEnabled(false);
            this.btnVerMapa.setEnabled(false);
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error durante la consulta de la ruta óptima.");
        }
    }

    public dlgConsultarRutaOptima(dlgAsociar parent, boolean modal, beUsuario usuario, alAlgMetaHeu alg, int idOrden) {
        super((java.awt.Frame)null, modal);
        try{
            initComponents();
            this.setDefaultCloseOperation(this.DO_NOTHING_ON_CLOSE);
            /*
             CAMBIOS EN LA VENTANA
            */
            this.addWindowListener(new WindowListener() {

                public void windowOpened(WindowEvent e) {

                }

                public void windowClosing(WindowEvent e) {
                    if (!enProceso){
                        setVisible(false);
                        dispose();
                    }
                }

                public void windowClosed(WindowEvent e) {
                    
                }

                public void windowIconified(WindowEvent e) {

                }

                public void windowDeiconified(WindowEvent e) {

                }

                public void windowActivated(WindowEvent e) {

                }

                public void windowDeactivated(WindowEvent e) {

                }
            });
            /*
             FIN CAMBIOS EN LA VENTANA
            */


            this.btnGuardarRutaOptima.setEnabled(true);
            this.obtenerOrdenDespachoElegida(parent);
            this.usuario = usuario;
            this.cboOpciones.setEnabled(false);
            this.btnVer.setEnabled(false);
            visualHelper.centrarDialogoEnPantalla(this);
            try {
                this.entradas = (new blAlmacen()).buscarObjsEntrada();
                if (entradas.size() >= 2) {
                    this.lblEntrada.setText("Entrada: "+this.entradas.get(0).getRotulo());
                    this.lblProductosRecoger.setText("Recálculo de la ruta óptima para la orden nro. "+idOrden);
                    this.ordenOptimoUbics = alg.getOrdenOptimoUbics();
                    this.ptosRutaOptima = alg.getPuntosRutaOptima();
                    this.btnGuardarRutaOptima.setEnabled(true);
                    this.entrada = this.entradas.get(0);
                    this.llenarTabla();
                }
            } catch (Exception e) {
                e.printStackTrace();
                visualHelper.mostrarMensajeError("Ocurrió un error durante la consulta de la ruta óptima.");
            }
        }
        catch(Exception ex){
            Logger.getLogger(dlgConsultarRutaOptima.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void llenarTabla()throws Exception{
        DefaultTableModel dtm = (DefaultTableModel)this.tblRutaDespacho.getModel();
        int numFilas = dtm.getRowCount();
        for(int i=(numFilas-1);i>=0;i--)
            dtm.removeRow(i);
        Object []datos = new Object[1];
        beAlmacen alm = (new blHelper()).obtenerDatosAlmacen();
        String linea = "";
        String ant = "";
        String act = "";
        int posX = -1;
        int pasilloV = -1;
        int posY = -1;
        int pasilloH = -1;
        int tamRack = alm.getUbsxrack();
        int fila = -1;
        int rack = -1;
        int piso = -1;
        int ub = -1;
        int cantCajas = -1;
        beUbicacion ubic = null;
        for(int i=1; i<this.ptosRutaOptima.size();i++){
            linea = i+".- ";
            if (this.ptosRutaOptima.get(i).getIdUbicacion() == -1){
                posX = this.ptosRutaOptima.get(i).getCoorX();
                pasilloV = (posX+tamRack)/(tamRack+1);
                posY = this.ptosRutaOptima.get(i).getCoorY();
                pasilloH = (posY+2)/3;
                act = " la intersección entre los pasillos "+pasilloV+"V y "+pasilloH+"H";
            }
            else{
                if (i != (this.ptosRutaOptima.size()-1)){
                    ubic = this.obtenerUbicacionDePunto(this.ptosRutaOptima.get(i).getIdUbicacion());
                    fila = ubic.getCoordenadas().getFila();
                    rack = ubic.getCoordenadas().getRack();
                    piso = ubic.getCoordenadas().getPiso();
                    ub = ubic.getCoordenadas().getUbicacion();
                    cantCajas = (new blPallet()).obtenerPalletPorId(ubic.getIdPallet()).getCantCajas();
                    act = "l rack "+ubic.getId_rack()+", a la ubicación con: coordenadas B"+rack+"-F"+fila+"-P"+piso+"-C"+ub+", pallet con código "+ubic.getIdPallet()+", producto "+ubic.getNombProducto()+" y despache "+cantCajas+" cajas.";
                }
                else
                    act = "";
            }
            if (i==1)
                linea += "Diríjase de la "+this.entrada.getRotulo()+" a";
            else{
                if (i==(this.ptosRutaOptima.size()-1))
                    linea += "Finalmente, diríjase a la "+this.entrada.getRotulo();
                else
                    linea += "Diríjase a";
            }
            linea += act;
            datos[0] = linea;
            dtm.addRow(datos);
        }
    }

    public beUbicacion obtenerUbicacionDePunto(int idUbicacion){
        for(int i=1; i<this.ordenOptimoUbics.size() ;i++){
            if (this.ordenOptimoUbics.get(i).getId_ubicacion() == idUbicacion)
                return this.ordenOptimoUbics.get(i);
        }
        return null;
    }

    public void obtenerOrdenDespachoElegida(pnfMantenimientoOrdenDespacho parent) throws Exception{
        int filaElegida = parent.getTblOrdenesDespacho().getSelectedRow();
        int idOrdenDespacho = Integer.parseInt(parent.getTblOrdenesDespacho().getValueAt(filaElegida, 0).toString());
        this.setOrdenDespacho((new blOrdenDespacho()).obtenerOrdenPorID(idOrdenDespacho));
    }
    
     public void obtenerOrdenDespachoElegida(dlgAsociar parent) throws Exception{
        //int filaElegida = parent.getTblOrdenesDespacho().getSelectedRow();
        int idOrdenDespacho = parent.getIdOrden();
        this.setOrdenDespacho((new blOrdenDespacho()).obtenerOrdenPorID(idOrdenDespacho));
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane5 = new javax.swing.JScrollPane();
        tblRutaDespacho = new javax.swing.JTable();
        lblTitulo = new javax.swing.JLabel();
        btnImprimir = new javax.swing.JButton();
        btnVerMapa = new javax.swing.JButton();
        lblOpciones = new javax.swing.JLabel();
        btnGuardarRutaOptima = new javax.swing.JButton();
        lblEntrada = new javax.swing.JLabel();
        lblProductosRecoger = new javax.swing.JLabel();
        cboOpciones = new javax.swing.JComboBox();
        btnVer = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Thor Store - Consultar ruta óptima de despacho");
        setAlwaysOnTop(true);
        setMinimumSize(new java.awt.Dimension(740, 530));
        setModal(true);
        setResizable(false);
        getContentPane().setLayout(null);

        tblRutaDespacho.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Descripción"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblRutaDespacho.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane5.setViewportView(tblRutaDespacho);
        tblRutaDespacho.getColumnModel().getColumn(0).setPreferredWidth(1000);

        getContentPane().add(jScrollPane5);
        jScrollPane5.setBounds(10, 120, 700, 330);

        lblTitulo.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Reservar ruta óptima");
        getContentPane().add(lblTitulo);
        lblTitulo.setBounds(150, 10, 410, 43);

        btnImprimir.setBackground(new java.awt.Color(240, 235, 226));
        btnImprimir.setFont(new java.awt.Font("Dialog", 0, 12));
        btnImprimir.setForeground(new java.awt.Color(0, 0, 0));
        btnImprimir.setText("Imprimir");
        btnImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirActionPerformed(evt);
            }
        });
        getContentPane().add(btnImprimir);
        btnImprimir.setBounds(410, 460, 100, 27);

        btnVerMapa.setBackground(new java.awt.Color(240, 235, 226));
        btnVerMapa.setFont(new java.awt.Font("Dialog", 0, 12));
        btnVerMapa.setForeground(new java.awt.Color(0, 0, 0));
        btnVerMapa.setText("Ver mapa");
        btnVerMapa.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerMapaActionPerformed(evt);
            }
        });
        getContentPane().add(btnVerMapa);
        btnVerMapa.setBounds(280, 460, 110, 27);

        lblOpciones.setFont(new java.awt.Font("Dialog", 0, 14));
        lblOpciones.setForeground(new java.awt.Color(0, 0, 0));
        lblOpciones.setText("Opciones");
        getContentPane().add(lblOpciones);
        lblOpciones.setBounds(510, 60, 80, 30);

        btnGuardarRutaOptima.setBackground(new java.awt.Color(240, 235, 226));
        btnGuardarRutaOptima.setFont(new java.awt.Font("Dialog", 0, 12));
        btnGuardarRutaOptima.setForeground(new java.awt.Color(0, 0, 0));
        btnGuardarRutaOptima.setText("Reservar");
        btnGuardarRutaOptima.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarRutaOptimaActionPerformed(evt);
            }
        });
        getContentPane().add(btnGuardarRutaOptima);
        btnGuardarRutaOptima.setBounds(150, 460, 110, 27);

        lblEntrada.setFont(new java.awt.Font("DejaVu Sans", 0, 18));
        lblEntrada.setForeground(new java.awt.Color(0, 0, 0));
        lblEntrada.setText("Entrada:");
        getContentPane().add(lblEntrada);
        lblEntrada.setBounds(10, 60, 500, 22);

        lblProductosRecoger.setFont(new java.awt.Font("Dialog", 0, 14));
        lblProductosRecoger.setForeground(new java.awt.Color(0, 0, 0));
        lblProductosRecoger.setText("Orden de productos a recoger");
        getContentPane().add(lblProductosRecoger);
        lblProductosRecoger.setBounds(10, 90, 680, 17);

        cboOpciones.setFont(new java.awt.Font("DejaVu Sans", 0, 12));
        cboOpciones.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2" }));
        getContentPane().add(cboOpciones);
        cboOpciones.setBounds(580, 60, 60, 25);

        btnVer.setBackground(new java.awt.Color(240, 235, 226));
        btnVer.setFont(new java.awt.Font("Dialog", 0, 12));
        btnVer.setForeground(new java.awt.Color(0, 0, 0));
        btnVer.setText("Ver");
        btnVer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVerActionPerformed(evt);
            }
        });
        getContentPane().add(btnVer);
        btnVer.setBounds(650, 60, 60, 27);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnVerMapaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerMapaActionPerformed
        // TODO add your handling code here:
        dlgMostrarRutaOptima mro = new dlgMostrarRutaOptima(this, true);
        mro.setVisible(true);
    }//GEN-LAST:event_btnVerMapaActionPerformed

    private void btnGuardarRutaOptimaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarRutaOptimaActionPerformed
        // TODO add your handling code here:
        int rslt = JOptionPane.showConfirmDialog(this, "¿Está seguro que desea reservar estas ubicaciones?", "Confirmación", JOptionPane.YES_NO_OPTION);
        if (rslt == JOptionPane.YES_OPTION){
            this.enProceso = false;
            try{
                (new blUbicacion()).reservarUbicaciones(this.ordenDespacho.getIdOrdenDespacho(), this.ordenOptimoUbics);
                visualHelper.mostrarMensajeSatisfaccion("Se reservaron las ubicaciones satisfactoriamente.");
                String strCoor = "";
                beCoordenada coor = null;
                for(int i=1;i<this.ordenOptimoUbics.size();i++){
                    coor = this.ordenOptimoUbics.get(i).getCoordenadas();
                    strCoor = "B"+coor.getRack()+"-F"+coor.getFila()+"-P"+coor.getPiso()+"-C"+coor.getUbicacion();
                    (new blLog()).registrarLog(this.usuario.getIdUsuario(), this.usuario.getCargo(), "Se reservó la ubicación con coordenadas "+strCoor+" para el despacho con código "+this.ordenDespacho.getIdOrdenDespacho());
                }
                this.setVisible(false);
                this.dispose();
            }
            catch (Exception e){
                e.printStackTrace();
                visualHelper.mostrarMensajeError("Ocurrió un error al reservar la ruta óptima.");
            }
        }
    }//GEN-LAST:event_btnGuardarRutaOptimaActionPerformed

    private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirActionPerformed
        // TODO add your handling code here:
        JFileChooser jfc = new JFileChooser();
        int rslt = jfc.showSaveDialog(this);
        if (rslt == JFileChooser.APPROVE_OPTION){
            String strArch = jfc.getSelectedFile().getName();
            if (!strArch.trim().isEmpty()){
                String ruta = jfc.getSelectedFile().getPath().trim();
                if (!ruta.isEmpty()){
                    try{
                        beAlmacen alma = (new blHelper()).obtenerDatosAlmacen();
                        if (alma.getNombre() != null){
                            if (this.tblRutaDespacho.getRowCount()>=1){
                                if (!ruta.endsWith(".pdf"))
                                    ruta += ".pdf";
                                System.out.println(this.usuario.getNombre());
                                float[] anchos = {10f};
                                visualHelper.crearPDF_RutaOptima(ruta, "Reporte de Ruta Óptima", this.usuario.getNombre(), alma.getNombre(), "Reporte de Ruta Óptima", anchos, this.ordenDespacho, this.tblRutaDespacho);
                                visualHelper.mostrarMensajeSatisfaccion("Se guardó satisfactoriamente el reporte del log de auditoría en la ruta\n"+ruta);
                            }
                            else
                                visualHelper.mostrarMensajeAdvertencia("No existen registros en el historial.");
                        }
                        else
                            visualHelper.mostrarMensajeAdvertencia("No se ha ingresado información sobre el almacén.");
                    }
                    catch (Exception e){
                        e.printStackTrace();
                        visualHelper.mostrarMensajeError("Ocurrió un error al generar el reporte de la ruta óptima.");
                    }
                }
                else
                    visualHelper.mostrarMensajeError("Especifique una ruta válida para guardar el archivo a imprmir.");
            }
            else
                visualHelper.mostrarMensajeError("Especifique un nombre al archivo que va a imprimir.");
        }
    }//GEN-LAST:event_btnImprimirActionPerformed

    private void btnVerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVerActionPerformed
        // TODO add your handling code here:
        try{
            int index = this.cboOpciones.getSelectedIndex();
            if (index == 0){
                this.ordenOptimoUbics = this.ordenOptimoUbics1;
                this.ptosRutaOptima = this.ptosRutaOptima1;
                this.entrada = this.entradas.get(0);
                this.llenarTabla();
                this.lblProductosRecoger.setText("Orden de productos a recoger para la orden nro. "+this.ordenDespacho.getIdOrdenDespacho()+". Distancia total: "+distancia1+".");
                this.lblEntrada.setText("Entrada: "+entradas.get(0).getRotulo());
            }
            if (index == 1){
                this.ordenOptimoUbics = this.ordenOptimoUbics2;
                this.ptosRutaOptima = this.ptosRutaOptima2;
                this.entrada = this.entradas.get(1);
                this.llenarTabla();
                this.lblProductosRecoger.setText("Orden de productos a recoger para la orden nro. "+this.ordenDespacho.getIdOrdenDespacho()+". Distancia total: "+distancia2+".");
                this.lblEntrada.setText("Entrada: "+entradas.get(1).getRotulo());
            }
        }
        catch(Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error durante la carga de la tabla.");
        }
    }//GEN-LAST:event_btnVerActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnGuardarRutaOptima;
    private javax.swing.JButton btnImprimir;
    private javax.swing.JButton btnVer;
    private javax.swing.JButton btnVerMapa;
    private javax.swing.JComboBox cboOpciones;
    private javax.swing.JScrollPane jScrollPane5;
    private javax.swing.JLabel lblEntrada;
    private javax.swing.JLabel lblOpciones;
    private javax.swing.JLabel lblProductosRecoger;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTable tblRutaDespacho;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the ordenOptimoUbics
     */
    public ArrayList<beUbicacion> getOrdenOptimoUbics() {
        return ordenOptimoUbics;
    }

    /**
     * @param ordenOptimoUbics the ordenOptimoUbics to set
     */
    public void setOrdenOptimoUbics(ArrayList<beUbicacion> ordenOptimoUbics) {
        this.ordenOptimoUbics = ordenOptimoUbics;
    }

    /**
     * @return the ordenDespacho
     */
    public beOrdenDespacho getOrdenDespacho() {
        return ordenDespacho;
    }

    /**
     * @param ordenDespacho the ordenDespacho to set
     */
    public void setOrdenDespacho(beOrdenDespacho ordenDespacho) {
        this.ordenDespacho = ordenDespacho;
    }

    /**
     * @return the ptosRutaOptima
     */
    public ArrayList<aePuntoUbicacion> getPtosRutaOptima() {
        return ptosRutaOptima;
    }

    /**
     * @param ptosRutaOptima the ptosRutaOptima to set
     */
    public void setPtosRutaOptima(ArrayList<aePuntoUbicacion> ptosRutaOptima) {
        this.ptosRutaOptima = ptosRutaOptima;
    }

}
